<!DOCTYPE html>
<title>Test event attributes for media element.</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<video controls></video>
<script>
async_test(function(t) {
    var ratechangeCount = 0;
    var playingCount = 0;
    var progressEventCount = 0;
    var pauseEventCount = 0;

    var video = document.querySelector("video");

    var actual_events = [];
    var expected_events = ["loadstart", "durationchange", "loadedmetadata",
         "loadeddata", "canplay", "canplaythrough", "play", "playing", "ratechange",
         "volumechange", "pause", "seeking", "seeked", "play", "playing", "pause",
         "ended", "abort", "emptied", "ratechange", "loadstart", "error"];

    video.oncanplaythrough = t.step_func(function(event) {
        actual_events.push(event.type);
        video.oncanplaythrough = null;
        assert_greater_than_equal(progressEventCount, 1);
        video.play();
    });

    video.oncanplay = t.step_func(function(event) {
        actual_events.push(event.type);
        video.oncanplay = null;
    });

    video.onplaying = t.step_func(function(event) {
        actual_events.push(event.type);
        if (++playingCount == 1)
            video.playbackRate = 2;
    });

    video.onratechange = t.step_func(function(event) {
        actual_events.push(event.type);
        if (++ratechangeCount == 1)
            video.volume = 0.5;
    });

    video.onvolumechange = t.step_func(function(event) {
        actual_events.push(event.type);
        video.pause();
    });

    video.onpause = t.step_func(function(event) {
        actual_events.push(event.type);
        if(++pauseEventCount == 1)
            video.currentTime = 5.6;
    });

    video.onseeked = t.step_func(function(event) {
        actual_events.push(event.type);
        video.play();
    });

    video.onended = t.step_func(function(event) {
        actual_events.push(event.type);
        video.src = "content/garbage.ogv";
        progressEventCount = 0;
    });

    video.onprogress = t.step_func(function() {
        // Don't log progress event since the number and order are platform specific.
        ++progressEventCount;
    });

    video.onerror = t.step_func_done(function(event) {
        actual_events.push(event.type);
        assert_equals(progressEventCount, 0);
        assert_array_equals(actual_events, expected_events);
    });

    var defaultEventStepFunction = t.step_func(function() {
        actual_events.push(event.type);
    });

    video.onabort = defaultEventStepFunction;
    video.ondurationchange = defaultEventStepFunction;
    video.onemptied = defaultEventStepFunction;
    video.onloadeddata = defaultEventStepFunction;
    video.onloadedmetadata = defaultEventStepFunction;
    video.onloadstart = defaultEventStepFunction;
    video.onplay = defaultEventStepFunction;
    video.onseeking = defaultEventStepFunction;

    video.src = "content/test.ogv";
});
</script>